package com.zw.gulimall.ware.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zw.common.to.mq.StockLockedTO;
import com.zw.common.to.ware.OrderTO;
import com.zw.common.to.ware.SkuHasStockTO;
import com.zw.common.to.ware.WareSkuLockTO;
import com.zw.common.utils.PageUtils;
import com.zw.gulimall.ware.entity.PurchaseDetailEntity;
import com.zw.gulimall.ware.entity.WareSkuEntity;
import com.zw.gulimall.ware.vo.SkuHasStockVo;

import java.util.List;
import java.util.Map;

/**
 * 商品库存
 *
 * @author zw
 * @email Alisinngai@gmail.com
 * @date 2023-06-12 01:10:45
 */
public interface WareSkuService extends IService<WareSkuEntity> {

    PageUtils queryPage(Map<String, Object> params);

    void saveOrUpdateBatchWareSku(List<PurchaseDetailEntity> collect);

    List<SkuHasStockVo> getSkuBrandHasStock(List<Long> ids);

    List<SkuHasStockTO> getSkusHasStock(List<Long> skuIds);
    /**
     * 库存锁定
     * sql执行增加锁定
     */
    Boolean orderLockStock(WareSkuLockTO lockTO);


    /**
     * 库存解锁
     * 供监听死信队列方法调用
     */
    void unLockStock(StockLockedTO locked) throws Exception;

    /**
     * 库存解锁
     * 订单解锁触发
     */
    void unLockStockOrder(OrderTO order) throws Exception;
}

